/*
 * 本材料用于定义各项异性传热材料的热物性参数，包括密度，比热和导热系数。其中导热系数给定x，y，z方向的导热系数，
 * 对于任意分布的材料，首先需要通过局部坐标转换计算出x,y,z方向的导热系数，再赋值到本材料中
 */
/*  初级版本: 2017年3月21日
 *   Author: liuxiao
 *   该版本所有物性参数为常数
 */

#ifndef ANISOHEATCONDUCTIONMATERIAL_H
#define ANISOHEATCONDUCTIONMATERIAL_H

#include "Material.h"


//Forward Declarations
class Function;


class SelfAnisoHeatConductionMaterial : public Material
{
public:
	SelfAnisoHeatConductionMaterial(const InputParameters & parameters);

protected:
  virtual void computeProperties();

  const bool _has_temp;
  const VariableValue & _temperature;

  const Real _my_thermal_conductivity_x;
  const Real _my_thermal_conductivity_y;
  const Real _my_thermal_conductivity_z;
  const PostprocessorValue * const _thermal_conductivity_x_pp;
  const PostprocessorValue * const _thermal_conductivity_y_pp;
  const PostprocessorValue * const _thermal_conductivity_z_pp;
  const Real _my_specific_heat;
  const Real _my_density;

  MaterialProperty<Real> * const _thermal_conductivity_x;
  MaterialProperty<Real> * const _thermal_conductivity_x_dT;
  MaterialProperty<Real> * const _thermal_conductivity_y;
  MaterialProperty<Real> * const _thermal_conductivity_y_dT;
  MaterialProperty<Real> * const _thermal_conductivity_z;
  MaterialProperty<Real> * const _thermal_conductivity_z_dT;

  MaterialProperty<Real> & _specific_heat;
  MaterialProperty<Real> & _density;

};

template<>
InputParameters validParams<SelfAnisoHeatConductionMaterial>();

#endif //ANISOHEATCONDUCTIONMATERIAL_H

